This invention pertains to computer programs stored in read-only memories and, more particularly, to preventing the copying of such programs from the memory.
A microcomputer system generally comprises a microprocessor, a random access memory and a program read-only memory. These three units in addition to other devices are generally interconnected by a bus. The program read-only memory normally stores the application software, i.e., the program to be performed by the microcomputer system. In many cases, this program is specially designed to perform a particular set of operations. The program may be very unique and may have required considerable time and effort to construct. Thus, the program can be a very valuable piece of proprietary information.
It is notoriously well known that many such valuable programs are easily pirated and sold for relatively small amounts of money since the pirater invested negligible time in copying the program. It should be realized that such programs which are stored in these read-only memories are easy to copy since the sole function of the read-only memory is to be read. Therefore, one need only have access to the microcomputer system and instruct the system to read out the contents of the program read-only memory. If this is not possible, one may obtain the memory chip itself and use this memory chip in conjunction with a microprocessor which is instructed to read out the contents of the program read-only memory.
The state of the industry is such that there are available many types of microprocessors. Each of these microprocessors has its own instruction set and along with the instruction set, a publicly known set of OP (operation) codes or mneumonic which define the instruction set associated with each such OP code is a set of microinstructions which sequence the microprocessor through the instruction indicated by the OP code. Thus, when one programs a conventional microprocessor as, for example, an Intel 8080, one knows the operations that the microprocessor can perform and one also knows the OP code set required to have the microprocessor perform the functions. Normally, one then writes the program using these publicly known OP codes or mneumonic; thereafter, the program is loaded via an assembler into a read-only memory as control bytes. Each byte is unique to an OP code or mneumonic. If the microcomputer system is to be mass produced, one then amasses a set of the conventional microprocessors and also has prepared a set of program read-only memories uniquely recorded with the control bytes of the program. (These read-only memories can be mass produced using conventional masking techniques during their fabrication.) Then each microprocessor is assembled with one of these program read-only memories and other necessary components to form the microcomputer system.
Normally, in operation, the control byte of an OP code is read from the program read-only memory into the microprocessor and is converted to an address. This address is used to select the first register of a series of microinstructions stored in the microinstruction read-only memory within the microprocessor. This results in the reading out of a sequence of microinstructions which cycle the microprocessor through the instruction step defined by that OP code or mneuomonics associated with the control byte.
Thus, it is seen that if one sequentially reads the set of control bytes from the program memory, one then has complete information about the program since one knows from published information which OP code is associated with each read-out control byte and what is the function of each OP code and how it is used to sequence the microprocessor through an instruction step.
Again, since many of the application programs stored in the program read-only memories require considerable time and money to develop, they are extremely valuable as units of industrial property.